// ['/login','/list','/item']
//
// .all : 结果是放在一起的

const BASE_URL = `http://localhost:3000`;

const changeParams = (obj) => Object.keys(obj)
  .map((item, index) => index === 0 ?
    `?${item}=${obj[item]}` :
    `&${item}=${obj[item]}`).join('');

function requestGET(url, params) {
  let str = changeParams(params);
  return new Promise((resolve, reject) => {
    $.ajax({
      url: `${BASE_URL}${url}${str}`,
      type: "get",
      dataType: "json",//数据类型
      success: function (res) {
        resolve(res);
      },
      error(err) {
        reject(undefined);
      }
    });
  })
}


function request() {
  // 其中有一个失败 其他的会怎么样?
  // promise.all 如果一个失败 其他的都失败
  // 怎么解决?

  // try {
  //   // 只能捕获 Error以及子类的错误
  //   Number(Nfdsafds)
  // }catch (e) {
  //   console.log(e);
  // }

  let promise1 = requestGET('/login', {});
  let promise2 = requestGET('/list', {token: '6c555120269c629c155e187738340eee'});
  let promise3 = requestGET('/item', {id: 2});

  Promise.all([promise1, promise2, promise3]).then(resArr => {
    // 异步的并发问题  并发
    console.log(resArr);
  });


  Promise.race([setTime(), setTime1()]).then(res => {
    //
    console.log(res);
  })

}

function setTime() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(1);
    }, 19);
  })
}

function setTime1() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(2);
    }, 10);
  })
}


// request();


function finallyTest() {
  let promise1 = requestGET('/login', {}).then(res => console.log(res)).catch(err => {
    console.log(err);
  }).finally(() => {
    // 不论成功或者失败 都会执行
    console.log('执行完成');
  });
  let promise2 = requestGET('/list', {token: '6c555120269c629c155e187738340eee'}).then(res => console.log(res)).catch(err => {
    console.log(err);
  }).finally(() => {
    // 不论成功或者失败 都会执行
    console.log('执行完成');
  });
  let promise3 = requestGET('/item', {id: 2}).then(res => console.log(res)).catch(err => {
    console.log(err);
  }).finally(() => {
    // 不论成功或者失败 都会执行
    console.log('执行完成');
  });


}

finallyTest();

